package com.kyh.sys.entity;

import java.util.Date;

import javax.persistence.Table;

import com.alibaba.fastjson.JSONObject;
import com.kyh.annotation.Model;
import com.kyh.entity.base.BaseEntity;

/**
*/
@Table(name="sys_menu", catalog="menu_id")
public class Menu extends BaseEntity<Menu> {

	@Model(nameTable="menuId")
	private Long menuId; // 主键ID
	@Model(nameTable="moduleId")
	private Long moduleId; // 所属模块ID
	@Model(nameTable="menuPid")
	private Long menuPid; // 父菜单ID
	@Model(nameTable="menuName")
	private String menuName; // 菜单名称
	@Model(nameTable="menuLev")
	private Integer menuLev; // 菜单等级（顶级菜单,一级菜单,二级菜单）
	@Model(nameTable="menuUrlLink")
	private String menuUrlLink; // 自定义链接地址，以/开头
	@Model(nameTable="menuSortNo")
	private Integer menuSortNo; // 排序序号
	@Model(nameTable="menuTable")
	private String menuTable; // 关联表名
	@Model(nameTable="menuIsCheckbox")
	private Integer menuIsCheckbox; // 是否显示单选框
	@Model(nameTable="menuIsShowNo")
	private Integer menuIsShowNo; // 是否显示序号
	@Model(nameTable="menuOrderBy")
	private String menuOrderBy; // 排序字段
	@Model(nameTable="menuSortType")
	private String menuSortType; // 默认排序方式
	@Model(nameTable="menuTypeTemplet")
	private Integer menuTypeTemplet; // 菜单模板类型，1普通列表2树
	@Model(nameTable="menuDiy")
	private String menuDiy; // 自定义脚本
	@Model(nameTable="showCount")
	private Integer showCount; // 是否显示统计按钮，0否1是
	@Model(nameTable="status")
	private Integer status; // 
	@Model(nameTable="createTime",type=Model.TYPE.DATE, format="yyyy-MM-dd HH:mm:ss")
	private Date createTime; // 
	@Model(nameTable="updateTime",type=Model.TYPE.DATE, format="yyyy-MM-dd HH:mm:ss")
	private Date updateTime; // 

	public Long getMenuId() {
		return menuId;
	}
	public Menu setMenuId(Long menuId) {
		this.menuId = menuId;
		return this;
	}
	public Long getModuleId() {
		return moduleId;
	}
	public Menu setModuleId(Long moduleId) {
		this.moduleId = moduleId;
		return this;
	}
	public Long getMenuPid() {
		return menuPid;
	}
	public Menu setMenuPid(Long menuPid) {
		this.menuPid = menuPid;
		return this;
	}
	public String getMenuName() {
		return menuName;
	}
	public Menu setMenuName(String menuName) {
		this.menuName = menuName;
		return this;
	}
	public Integer getMenuLev() {
		return menuLev;
	}
	public Menu setMenuLev(Integer menuLev) {
		this.menuLev = menuLev;
		return this;
	}
	public String getMenuUrlLink() {
		return menuUrlLink;
	}
	public Menu setMenuUrlLink(String menuUrlLink) {
		this.menuUrlLink = menuUrlLink;
		return this;
	}
	public Integer getMenuSortNo() {
		return menuSortNo;
	}
	public Menu setMenuSortNo(Integer menuSortNo) {
		this.menuSortNo = menuSortNo;
		return this;
	}
	public String getMenuTable() {
		return menuTable;
	}
	public Menu setMenuTable(String menuTable) {
		this.menuTable = menuTable;
		return this;
	}
	public Integer getMenuIsCheckbox() {
		return menuIsCheckbox;
	}
	public Menu setMenuIsCheckbox(Integer menuIsCheckbox) {
		this.menuIsCheckbox = menuIsCheckbox;
		return this;
	}
	public Integer getMenuIsShowNo() {
		return menuIsShowNo;
	}
	public Menu setMenuIsShowNo(Integer menuIsShowNo) {
		this.menuIsShowNo = menuIsShowNo;
		return this;
	}
	public String getMenuOrderBy() {
		return menuOrderBy;
	}
	public Menu setMenuOrderBy(String menuOrderBy) {
		this.menuOrderBy = menuOrderBy;
		return this;
	}
	public String getMenuSortType() {
		return menuSortType;
	}
	public Menu setMenuSortType(String menuSortType) {
		this.menuSortType = menuSortType;
		return this;
	}
	public Integer getMenuTypeTemplet() {
		return menuTypeTemplet;
	}
	public Menu setMenuTypeTemplet(Integer menuTypeTemplet) {
		this.menuTypeTemplet = menuTypeTemplet;
		return this;
	}
	public String getMenuDiy() {
		return menuDiy;
	}
	public Menu setMenuDiy(String menuDiy) {
		this.menuDiy = menuDiy;
		return this;
	}
	public Integer getShowCount() {
		return showCount;
	}
	public Menu setShowCount(Integer showCount) {
		this.showCount = showCount;
		return this;
	}
	public Integer getStatus() {
		return status;
	}
	public Menu setStatus(Integer status) {
		this.status = status;
		return this;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public Menu setCreateTime(Date createTime) {
		this.createTime = createTime;
		return this;
	}
	public Date getUpdateTime() {
		return updateTime;
	}
	public Menu setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
		return this;
	}

	public static Menu menu(
			Long moduleId,
			Long menuPid,
			String menuName,
			Integer menuLev,
			String menuUrlLink,
			Integer menuSortNo,
			String menuTable,
			Integer menuIsCheckbox,
			Integer menuIsShowNo,
			String menuOrderBy,
			String menuSortType,
			Integer menuTypeTemplet,
			String menuDiy,
			Integer showCount,
			Integer status
			) {
		Menu entity = new Menu();
		entity.setModuleId(moduleId);
		entity.setMenuPid(menuPid);
		entity.setMenuName(menuName);
		entity.setMenuLev(menuLev);
		entity.setMenuUrlLink(menuUrlLink);
		entity.setMenuSortNo(menuSortNo);
		entity.setMenuTable(menuTable);
		entity.setMenuIsCheckbox(menuIsCheckbox);
		entity.setMenuIsShowNo(menuIsShowNo);
		entity.setMenuOrderBy(menuOrderBy);
		entity.setMenuSortType(menuSortType);
		entity.setMenuTypeTemplet(menuTypeTemplet);
		entity.setMenuDiy(menuDiy);
		entity.setShowCount(showCount);
		entity.setStatus(status);
		return entity;
	}
	
	public JSONObject tree() {
		JSONObject JO = new JSONObject();
		
		JO.put("id", this.getMenuId());
		JO.put("text", this.getMenuName());
		JO.put("pid", this.getMenuPid());
		JO.put("type", "menu");
		JO.put("menuLev", this.getMenuLev());
		return JO;
	}
}